package com.tsingxiao.codegenerate.common.dto;

import java.io.Serializable;

/**
 * 接口返回结果实体类
 */
@SuppressWarnings("unused")
public class ResultDto<T> implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = -3255999335102040962L;
    /**
     * 返回结果代码，小于0表示结果异常，大于或等于0表示结果正常
     */
    private int code;
    /**
     * 返回结果提示信息
     */
    private String msg;
    /**
     * 返回结果业务数据对象
     */
    private T data;

    /**
     * 创建一个实例
     *
     * @return EntityResult
     */
    public static <T> ResultDto<T> newInstance(T entity) {
        return new ResultDto<>(entity);
    }

    public ResultDto(int code, String msg, T data) {
        super();
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public ResultDto(int code, String msg) {
        super();
        this.code = code;
        this.msg = msg;
    }

    public ResultDto(T data) {
        super();
        this.data = data;
    }

    public ResultDto() {
        super();
    }

    /**
     * 设置结果代码<br />约定：小于0 表示业务失败；大于或等于0 表示业务正常
     *
     * @param code 结果代码
     * @return 响应信息
     */
    public ResultDto<T> code(int code) {
        this.code = code;
        return this;
    }

    /**
     * 设置结果提示信息
     *
     * @param msg 提示信息
     * @return 响应信息
     */
    public ResultDto<T> msg(String msg) {
        this.msg = msg;
        return this;
    }

    /**
     * 设置结果提示信息
     *
     * @param code 编码
     * @param msg  提示信息
     * @return 响应信息
     */
    public ResultDto<T> msg(int code, String msg) {
        this.code = code;
        this.msg = msg;
        return this;
    }

    /**
     * 设置结果提示信息
     *
     * @param code 编码
     * @param msg  提示信息
     * @param data 提示信息
     * @return 响应信息
     */
    public ResultDto<T> msg(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
        return this;
    }

    /**
     * 判断是否成功
     *
     * @return true成功 false失败
     */
    public boolean isSuccess() {
        return this.code == ResultEnum.SUCCESS.getCode();
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    /**
     * 返回结果代码枚举类
     */
    public enum ResultEnum {
        /**
         * 参数错误
         */
        PARAM_ERROR(-4),
        /**
         * 未查询到结果空
         */
        NULL(-6),
        /**
         * 失败
         */
        FAIL(-1),
        /**
         * 成功
         */
        SUCCESS(0);

        /**
         * 值
         */
        int code;


        ResultEnum(int code) {
            this.code = code;
        }

        public int getCode() {
            return code;
        }
    }

    @Override
    public String toString() {
        return "ResultDto{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

